 /*******************************************************************************
  * Copyright (c) 2000, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.core.runtime.internal.stats;

 import java.util.ArrayList ;

 /**
  * Maintain statistics about a loaded class.
  */
 public class ClassStats {
     private String className; // fully qualified name of this class
 private ClassloaderStats classloader; // the classloader that loaded this class
 private int loadOrder = -1;

     private long timestamp; // time at which this class was loaded
 private long timeLoading; // time to load the class
 private long timeLoadingOthers = 0; // time spent loading classes which has been triggered by this class

     // parentage of classes loaded
 private ClassStats loadedBy = null; // a reference to the class that loaded this class
 private ArrayList loaded = new ArrayList (2); // a reference to the classes that this class loaded

     private boolean duringStartup; // indicate if the class was loaded during platform startup

     //information to retrieve the stacktrace from the file
 private long traceStart = -1;
     private long traceEnd = -1;

     public ClassStats(String name, ClassloaderStats classloader) {
         className = name;
         timestamp = System.currentTimeMillis();
         duringStartup = StatsManager.isBooting();
         this.classloader = classloader;
     }

     public void setLoadOrder(int order) {
         loadOrder = order;
     }

     public void loadingDone() {
         timeLoading = System.currentTimeMillis() - timestamp;
     }

     public long getTimeLoading() {
         return timeLoading;
     }

     public long getLocalTimeLoading() {
         return timeLoading - timeLoadingOthers;
     }

     public void addTimeLoadingOthers(long time) {
         timeLoadingOthers = timeLoadingOthers + time;
     }

     public long getTraceStart() {
         return traceStart;
     }

     public long getTraceEnd() {
         return traceEnd;
     }

     public void setTraceStart(long position) {
         traceStart = position;
     }

     public void setTraceEnd(long position) {
         traceEnd = position;
     }

     public void loaded(ClassStats child) {
         loaded.add(child);
     }

     public void setLoadedBy(ClassStats parent) {
         loadedBy = parent;
     }

     public ClassStats getLoadedBy() {
         return loadedBy;
     }

     public ArrayList getLoadedClasses() {
         return loaded;
     }

     public String getClassName() {
         return className;
     }

     public boolean isStartupClass() {
         return duringStartup;
     }

     public ClassloaderStats getClassloader() {
         return classloader;
     }

     public int getLoadOrder() {
         return loadOrder;
     }

     public long getTimestamp() {
         return timestamp;
     }

     public void toBaseClass() {
         duringStartup = true;
         loadOrder = -2;
     }
 }

